#include <string>
#include <list>
#include "call.h"

namespace AST {

    // Construtor Padrão
    Call::Call(std::string* content) {
        // Configuração
        this->_setContent(content);
    };

    Call::Call(std::string* content, std::list<Node*>* parameters) {
        // Configuração
        this->_setContent(content);
        this->_parameters = *parameters;
    };

    // Configuração do Conteúdo do Token
    Call* Call::_setContent(std::string* content) {
        // Configuração
        this->_content = content;
        // Encadeamento
        return this;
    };

    // Apresenta o Conteúdo Capturado pelo Token
    std::string* Call::getContent() {
        // Apresentação
        return this->_content;
    };

    // Adicionar Parâmetro
    Call* Call::addParameter(Node* parameter) {
        // Adicionar Parâmetro
        this->_parameters.push_front(parameter);
        // Encadeamento
        return this;
    };

    // Captura de Parâmetros
    std::list<Node*> Call::getParameters() {
        // Apresentação
        return this->_parameters;
    };

    // Sobrescrita
    std::string Call::toString(int indent) {
        // Inicialização
        std::string output = this->getIndentSpaces(indent)
            + "Call '" + (*this->getContent()) + "'";
        // Parâmetros
        std::list<Node*> parameters = this->getParameters();
        // Processar Parâmetros
        for (std::list<Node*>::iterator i = parameters.begin(); i != parameters.end(); i++) {
            output = output + "\n"
                + (*i)->toString(indent + 1);
        }
        // Apresentação
        return output;
    };

};

